﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WLYT.Domain.Model.HikModel
{
    public class HKAgvRequestModel
    {
        /// <summary>
        /// 请求编号，每个请求都要一个唯一编号， 同一个请求重复提交， 使用同一编号。必填
        /// </summary>
        public string reqCode { get; set; } = "";

        /// <summary>
        /// 请求时间截 格式: “yyyy-MM-dd HH:mm:ss”。
        /// </summary>
        public string reqTime { get; set; } = "";

        /// <summary>
        /// 客户端编号，如 PDA，HCWMS 等。
        /// </summary>
        public string clientCode { get; set; } = "";

        /// <summary>
        /// 令牌号, 由调度系统颁发。
        /// </summary>
        public string tokenCode { get; set; } = "";
        /// <summary>
        /// 任务类型，与在 RCS-2000 端配置的主任务类型编号一致。
        /// </summary>
            /*内置任务类型:
                厂内货架搬运: F01
                厂内货架空满交换: F02
                辊筒搬运接驳:F03
                厂内货架出库 AGV 待命:F04
                旋转货架: F05
                厂内电梯任务: F06
            以下为叉车专用任务类型
                高位货架到工作台: F11
                工作台到高位货架: F12
                巷道到工作台: F13
                工作台到巷道: F14
                高位货架到工作台(接驳) : F15
                工作台到高位货架 (接驳) : F16
                巷道到工作台(接驳) : F17
                工作台到巷道(接驳) : F18
                叉车电梯主任务: F20
            */
        public string taskTyp { get; set; } = "";

        /// <summary>
        /// 容器类型（叉车/CTU 专用） 叉车项目必传
        /// </summary>
        public string ctnrTyp { get; set; } = "";

        /// <summary>
        /// 容器编号（叉车/CTU 专用）
        /// </summary>
        public string ctnrCode { get; set; } = "";

        /// <summary>
        /// 工作位，一般为机台或工作台位置，与 RCS-2000 端配置的位置名称一致, 工作位名称为字母\数字\或组合, 不超过 32 位。
        /// </summary>
        public string wbCode { get; set; } = "";

        /// <summary>
        /// 位置路径：AGV 关键路径位置集合，与任务类型中模板配置的位置路径一一对应。待现场地图部署、配置完成后可获取。
        /// </summary>
        public List<HKAgvPositionModel> positionCodePath { get; set; } = new List<HKAgvPositionModel>();

        /// <summary>
        /// 货架编号，不指定货架可以为空
        /// </summary>
        public string podCode { get; set; } = "";

        /// <summary>
        /// “180”,”0”,”90”,”-90” 分别 对 应 地 图 的 ” 左 ”,” 右 ”,”上”,”下” ，
        /// 不指定方向可以为空；如果终点不是工作台或工作台未配置方向则作为终点方向塞入子任务报文，
        /// 如果工作台配有方向则两者做差结果作为终点方向塞入子任务报文
        /// </summary>
        public string podDir { get; set; } = "";

        /// <summary>
        /// 货架类型, 传空时表示随机找个货架找空货架传参方式如下：
        /// -1: 代表不关心货架类型, 找到空货架即可.
        /// -2: 代表从工作位获取关联货架类型, 如果未配置, 只找空货架.货架类型编号: 只找该货架类型的空货架.
        /// </summary>
        public string podTyp { get; set; } = "";

        /// <summary>
        /// 物料批次或货架上的物料唯一编码,生成任务单时,货架与物料直接绑定时使用. 
        /// （通过同时传 podCode 和materialLot 来 绑 定 或 通 过wbCode 找 到 位 置 上 的 货 架 和materialLot 来绑定）巷道任务通过该字段传入特征值
        /// </summary>
        public string materialLot { get; set; } = "";

        /// <summary>
        /// 优先级，从（1~127）级，最大优先级最高。为空时，采用任务模板的优先级
        /// </summary>
        public string priority { get; set; } = "";

        /// <summary>
        /// 任务单号,选填, 不填系统自动生成，UUID 小于等于 64 位
        /// </summary>
        public string taskCode { get; set; } = "";

        /// <summary>
        /// AGV 编号，填写表示指定某一编号的 AGV 执行该任务
        /// </summary>
        public string agvCode { get; set; } = "";

        /// <summary>
        /// 任务编号 | 优先级  priorities:[{"priority":"","taskCode":""},{"priority":"","taskCode":""}]
        /// </summary>
        public List<HKAgvPriorityModel> priorities { get; set; } = new List<HKAgvPriorityModel>();

        /// <summary>
        /// 绑定解绑的仓位（库位）编码 
        /// </summary>
        public string stgBinCode { get; set; } = "";

        /// <summary>
        /// "1"：绑定， "0"：解绑
        /// </summary>
        public string indBind { get; set; } = "";


        /// <summary>
        /// 自定义字段.JSON 格式
        /// </summary>
        public string data { get; set; } = "";


        /// <summary>
        /// 取放类型   1.取申请，2.放申请
        /// </summary>
        public string type { get; set; } = "";


        /// <summary>
        /// 预调度（任务点位呼叫号）
        /// </summary>
        public string positionCode { get; set; } = "";

        /// <summary>
        /// 预调度时间（s） 表示真实任务预计多久后生成，传-1 清空点位全部的预调度任务
        /// </summary>
        public string nextTask { get; set; } = "";

        /// <summary>
        /// 预调度 AGV 类型，预调度需要指定车型
        /// </summary>
        public string agvTyp { get; set; } = "";

        /// <summary>
        /// 需求空仓位数
        /// </summary>
        public string useableLayers { get; set; } = "";

        /// <summary>
        /// 方法名, 可使用任务类型做为方法名，由RCS-2000任务模板配置后并告知上层系统，
        /// 默认使用方式:
        /// start : 任务开始
        /// outbin : 走出储位
        /// end : 任务结束
        /// cancel : 任务单取消
        /// apply：CTU料箱取放申请 
        /// </summary>
        public string method { get; set; } = "";





        /// <summary>
        /// 地码 X 坐标(mm)：任务完成时有值
        /// </summary>
        public string cooX { get; set; } = "";
        /// <summary>
        /// 地码 Y 坐标(mm)：任务完成时有值
        /// </summary>
        public string cooY { get; set; } = "";

        /// <summary>
        /// 当前位置编号
        /// 任务开始：该位置为任务起点
        /// 走出储位：该位置为任务起点
        /// 任务单取消：该位置为工作位编号
        /// 任务结束：该位置为任务终点
        /// 取放申请：取放料箱的点
        /// </summary>
        public string currentPositionCode { get; set; } = "";

        /// <summary>
        /// 地图编号
        /// </summary>
        public string mapCode { get; set; } = "";
        /// <summary>
        /// 地码编号：任务完成时有值
        /// </summary>
        public string mapDataCode { get; set; } = "";
    }
}
